using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using CustomSecurity;
/// <summary>
/// Summary description for Global
/// </summary>
public class Global : System.Web.HttpApplication
{
    private System.ComponentModel.IContainer components = null;
    public const string AppPath = "AppPath";
    private const string AUTHENTICATION_COOKIE_KEY = "CustomAuthentication.Cookie.Name";
    

	public Global()
	{
        InitializeComponent();
	}

    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup

    }

    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown

    }

    void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs

    }

    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started

    }
    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.

    }
    void Application_BeginRequest(Object sender, EventArgs e)
    {
        string sAppPath = (Request.ApplicationPath != "/") ? Request.ApplicationPath : "";
        if (Context.Items.Contains(AppPath))
            Context.Items.Remove(AppPath);
        Context.Items.Add(AppPath, sAppPath);
    }
    void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        if (Request.Path.ToLower().IndexOf("/login.aspx") == -1)
        {

            bool forceLogout = !Request.IsAuthenticated;
            
            if (!forceLogout)
            {
                CustomIdentity identity = (CustomIdentity)Context.User.Identity;
                forceLogout = (identity.UserIPAddress != Request.UserHostAddress);
            }

            if (forceLogout)
            {
                CustomSecurity.CustomAuthentication.Signout();
            }
        }
        
    }
    void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
    }
}
